package bancosys.tec.persist.persister;

/**
 * Ação de persistência.
 * 
 * @created Jul 11, 2007
 * @author Gustavo Almeida
 */
public enum PersistenceAction {
    /** Inserção de novo dado na base. */
    insert("Inclusão", "Inclusão"),

    /** Atualização de dado já existente. */
    update("Alteração", "Alteração"),

    /** Remoção de dado. */
    remove("Exclusão", "Exclusão"),

    /** Inserção de novo dado na base fria, seja para inserção, alteração ou remoção na base quente. */
    coldInsert("Inclusão na base fria", "Inclusão"),

    /** Atualização de dado já existente na base fria, antes da autorização. */
    coldUpdate("Alteração na base fria", "Alteração"),

    /** Remoção de dado da base fria, antes da autorização. */
    coldRemove("Exclusão da base fria", "Exclusão"),

    /** Inserção de novo dado na base. */
    insertWAction("Inclusão com ação", "Inclusão"),

    /** Atualização de dado já existente. */
    updateWAction("Alteração com ação", "Alteração"),

    /** Rejeitando a autorização **/
    reject("Rejeição na autorização", "Não Autorizado");

    /** Nome mostrado para usuário. */
    private String displayName;

    /** Nome mostrado para auditoria. */
    private String nomeAuditoria;

    /**
     * @return nome usado na auditoria
     */
    public String getNomeAuditoria() {
        return this.nomeAuditoria;
    }

    /**
     * @param nomeAuditoria Nome usado na auditoria
     */
    public void setNomeAuditoria(String nomeAuditoria) {
        this.nomeAuditoria = nomeAuditoria;
    }

    /**
     * Construtor.
     * 
     * @param displayName nome para ser mostrado ao usuário.
     * @param nomeAuditoria nome passado para a auditoria
     */
    PersistenceAction(String displayName, String nomeAuditoria) {
        this.displayName = displayName;
        this.nomeAuditoria = nomeAuditoria;
    }

    /**
     * Checks if this is a cold persistence action
     * 
     * @return boolean
     */
    public boolean isCold() {
        return this.equals(coldInsert) || this.equals(coldRemove) || this.equals(coldUpdate);
    }

    /**
     * Descrição de ação de persistência.
     * 
     * @return a descrição da ação de persistência.
     */
    @Override
    public String toString() {
        return this.displayName;
    }
}
